#include <signal.h>
#include <linux/sched.h>

void math_error(void)
{
	/**
	 * 清除 x87 浮点单元（FPU）的状态标志和异常状态
	 * 清除异常标志：无效操作（Invalid Operation）/除零异常（Divide-by-Zero）/上溢（Overflow）
	 * 		下溢（Underflow）/精度损失（Precision）/栈错误（Stack Fault）
	 * 清除忙标志：该标志表示 FPU 正在执行操作
	 */
	__asm__("fnclex");
	if (last_task_used_math) {
		last_task_used_math->signal |= 1<<(SIGFPE-1);
	}
}